home *** CD-ROM | disk | FTP | other *** search
- {
- > The text on the screen would be something like:
- > What is your phone number? ( ) -
- > ^^^ ^^^ ^^^^
- > But text could only be entered at the marked locations. As soon as one
- > section is full it would move to the one beside it but read in a different
- > variable..
-
- How about this: (it's tested, BTW)
- }
-
- USES Crt;
-
- VAR
- ts : String;
-
- PROCEDURE MaskedReadLn(VAR s : String; mask : String; fillCh : Char);
- { in 'mask', chars with A will only accept alpha input, and chars
- with 0 will only accept numeric input; spaces accept anything }
- VAR ch : Char; sx, ox, oy : Byte;
- BEGIN
- s := ''; ox := WhereX; oy := WhereY; sx := 0;
- REPEAT
- Inc(sx);
- IF (mask[sx] IN ['0', 'A']) THEN
- Write(fillCh)
- ELSE IF (mask[sx] = '_') THEN
- Write(' ')
- ELSE Write(mask[sx]);
- UNTIL (sx = Length(mask));
- sx := 0;
- WHILE (NOT (mask[sx + 1] IN [#32, '0', 'A']))
- AND (sx < Length(mask)) DO BEGIN
- Inc(sx);
- s := s + mask[sx];
- END;
- GotoXY(ox + sx, oy);
- REPEAT
- ch := ReadKey;
- IF (ch = #8) THEN BEGIN
- IF (Length(s) > sx) THEN BEGIN
- IF NOT (mask[Length(s)] IN [#32, '0', 'A']) THEN BEGIN
- REPEAT
- s[0] := Chr(Length(s) - 1);
- GotoXY(WhereX - 1, WhereY);
- UNTIL (Length(s) <= sx) OR (mask[Length(s)] IN [#32, '0', 'A']);
- END;
- s[0] := Chr(Length(s) - 1); GotoXY(WhereX - 1, WhereY);
- Write(fillCh); GotoXY(WhereX - 1, WhereY);
- END ELSE BEGIN
- Sound(440);
- Delay(50);
- NoSound;
- END;
- END ELSE IF (Length(s) < Length(mask)) THEN BEGIN
- CASE mask[Length(s) + 1] OF
- '0' : IF (ch IN ['0'..'9']) THEN BEGIN
- Write(ch);
- s := s + ch;
- END;
- 'A' : IF (UpCase(ch) IN ['A'..'Z']) THEN BEGIN
- Write(ch);
- s := s + ch;
- END;
- #32 : BEGIN
- Write(ch);
- s := s + ch;
- END;
- END;
- WHILE (Length(s) < Length(mask))
- AND (NOT (mask[Length(s) + 1] IN [#32, '0', 'A'])) DO BEGIN
- IF (mask[Length(s) + 1] = '_') THEN s := s + ' ' ELSE
- s := s + mask[Length(s) + 1];
- GotoXY(WhereX + 1, WhereY);
- END;
- END;
- UNTIL (ch IN [#13, #27]);
- END;
-
- BEGIN
- ClrScr;
- Write('Enter phone number: ');
- MaskedReadLn(ts, '(000)_000-0000', '_');
- WriteLn;
- Write('Enter postal code: ');
- MaskedReadLn(ts, 'A0A_0A0', '_');
- WriteLn;
- END.
-
- {
- It can be improved with colours and such stuff, but it may suit your
- needs without enhancement. If you have questions about how this works,
- feel free to ask.
- }
-